package com.util.picture;

import com.util.aliyun.ReplaceImgURL;
import com.util.property.Properties;
import org.apache.log4j.Logger;
import sun.misc.BASE64Decoder;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Date;

/**
 * Created by reeves on 2015/8/29.
 */
public class StorePicture {

    private static final Logger LOGGER = Logger.getLogger(StorePicture.class);

    /**
     * @param picData
     * @param tag
     * @return
     * @description: 存储图片
     */
    public static String store(String userPhoto, String picData, int tag) throws IOException {
        /**
         * 此类的主要作用是将String格式的图片转换为文件存储到服务器上
         * @param: picData String格式的图片数据
         * @param: tag 标志图片的类型，可自定义
         */

        /*如果用户原本头像为空*/
        if (userPhoto == null || userPhoto.isEmpty()) {

            // 存储用户头像
            if (tag == 0) {
                String fileName = new Date().getTime() + ".jpg";
                GenerateImage(picData, Properties.UserPhotoPah + fileName);

                return ReplaceImgURL.uploadUserPhoto(Properties.UserPhotoPah + fileName);
            } else {
                LOGGER.error("用户原本头像为空,非存储用户头像...");
                return "error";
            }
        } else {

            // 存储用户头像
            if (tag == 0) {
                String fileName = new Date().getTime() + ".jpg";
                GenerateImage(picData, Properties.UserPhotoPah + fileName);

                return ReplaceImgURL.uploadUserPhoto(Properties.UserPhotoPah + fileName);

                // 删除掉原来的图片
//                File oldImage = new File(Properties.ResourceDir + userPhoto);
//                if (oldImage.exists()) {
//                    oldImage.delete();
//                }
            } else {
                LOGGER.error("用户原本头像非空,非存储用户头像...");
                return "error";
            }
        }

        //String imgFilePath = ""; //图片存储地址
        // 用户头像存储地址: /kuibu/static/res/user
    }

    /**
     * @param imgStr
     * @param imgFilePath
     * @return
     * @description: 根据图片String数据存储图片文件
     */
    public static boolean GenerateImage(String imgStr, String imgFilePath) {

        // 图像数据为空
        if (imgStr == null) {
            LOGGER.error("imgStr为空...");
            return false;
        }


        /**
         * 这里使用的是sun.misc.BASE64Decoder,因为客户端使用的是sun的编码方式
         * 需要客户端做一定更改才能使用java.util.Base64
         * */
        BASE64Decoder decoder = new BASE64Decoder();
        try {
            // Base64解码
            byte[] bytes = decoder.decodeBuffer(imgStr);
            for (int i = 0; i < bytes.length; ++i) {
                if (bytes[i] < 0) {// 调整异常数据
                    bytes[i] += 256;
                }
            }
            // 生成jpeg图片
            OutputStream out = new FileOutputStream(imgFilePath);
            out.write(bytes);
            out.flush();
            out.close();


            return true;
        } catch (Exception e) {
            LOGGER.error("解码图片生成图片文件错误...", e);
            return false;
        }
    }


    /**
     * 测试使用OutputStream是否能根据传递的路径新建文件--实验证明是可以的
     */
   /* public static void main(String[] args) {
        BASE64Decoder decoder = new BASE64Decoder();
        try {
            // Base64解码
            byte[] bytes = decoder.decodeBuffer("fhwojpjfopwjofjwofjowjfow");
            for (int i = 0; i < bytes.length; ++i) {
                if (bytes[i] < 0) {// 调整异常数据
                    bytes[i] += 256;
                }
            }

            OutputStream out = new FileOutputStream("D:\\USRP\\a.jpg");
            out.write(bytes);
            out.flush();
            out.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }*/


}
